package com.wangbo.sort;

/**
 * 选择排序（最差排序）
 * 三个指针
 */
public class SelectionSort {
    public static void selectionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }

        // p1: 遍历指针,从第一个元素移动到倒数第二个元素
        for (int p1 = 0; p1 < arr.length - 1; p1++) {
            // 暂存指针，指向p1元素到最后一个元素间的最小值
            int p3 = p1;
            // p2: 遍历指针，从p1+1移动到最后一个元素
            for (int p2 = p1 + 1; p2 < arr.length; p2++) {
                p3 = arr[p3] < arr[p2] ? p3 : p2;
            }
            swap(arr, p1, p3);
        }
    }

    /**
     * 交换指针对象
     */
    public static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

}
